library(tidyverse, warn.conflicts = F)
library(rvest)
library(plotly)
library(cluster)
library(ggdendro)
theme_set(theme_light())
source("plota_solucoes_hclust.R")
Para realizar minha análise usarei os dados do Rotten Tomatoes sobre os filmes do Chris Evans, nesse conjunto de dados temos as seguintes variáveis: o titulo de cada filme, sua nota no Rotten Tomatoes, o personagem interpretado pelo ator naquele filme, o lucro do filme(em milhões de dolares) e seu ano de lançamento, para minha análise utilizarei apenas os filmes: que Chris Evans participou como ator, que já tenham sido lançados e que tenham valores validos em suas variáveis(alguns filmes podem não ter certas variáveis).
from_page <- read_html("https://www.rottentomatoes.com/celebrity/Chris_Evans/") %>%
html_node("#filmographyTbl") %>% # A sintaxe da expressão é de um seletor à lá JQuery: https://rdrr.io/cran/rvest/man/html_nodes.html
html_table(fill=TRUE) %>% # Faz parse
as.tibble()
filmes_chris_evans = from_page %>%
filter(RATING != "No Score Yet",
`BOX OFFICE` != "—",
CREDIT != "Executive Producer") %>%
mutate(RATING = as.numeric(gsub("%", "", RATING)),
`BOX OFFICE` = as.numeric(gsub("[$|M]", "", `BOX OFFICE`))) %>%
filter(`BOX OFFICE` >= 1) # Tem dois filmes que não parecem ter sido lançados no mundo todo
## Warning in evalq(as.numeric(gsub("[$|M]", "", `BOX OFFICE`)),
## <environment>): NAs introduced by coercion
Para análisar os tipo de filmes que Chris Evans fez utilizarei duas variáveis: sua nota no Rotten Tomatoes e o lucro do filme(em milhões de dolares), para ter uma ideia de como estão espalhados esses dados plotarei um gráfico abaixo com as duas variaveis.
names(filmes_chris_evans) <- c("Nota","Nome_Do_Filme","Papel","Lucro","ano")
plot_inicial = filmes_chris_evans %>%
ggplot(aes(x = Nota, y = Lucro, label = Nome_Do_Filme)) +
labs(title = "Grafico da Nota X Lucro dos filmes do Chris Evans") +
xlab("Nota no Rotten Tomatoes") +
ylab("Lucro do Filme(Em Milhões)") +
geom_point()
ggplotly(plot_inicial)
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`
Ao dar uma olhada no gráfico percebi que os altos valores de lucro de alguns de seus filmes atrapalham um pouco a visualização do gráfico, pois a maioria dos filmes acaba se concetrando embaixo do gráfico, para resolver esse problema passarei esses dados para uma escala logarítimica.
plot_inicial = filmes_chris_evans %>%
ggplot(aes(x = Nota, y = Lucro, label = Nome_Do_Filme)) +
labs(title = "Grafico da Nota X Lucro dos filmes do Chris Evans") +
xlab("Nota no Rotten Tomatoes") +
ylab("Lucro do Filme(Em Milhões) - em escala logaritimica") +
geom_point() +
scale_y_log10()
ggplotly(plot_inicial)
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`
Agora olhando o gráfico acima pode se perceber melhor, que alguns pontos estão mais concetrados em grupos, para ter uma ideia de quantos grupos são formados por esses pontos vou usar o método da hierárquica aglomerativa, que vai me dar uma ideia de quantos grupos são formados pelos pontos sem perder a consistencia de grupo, para tanto vou plotar um gráfico de Número de Grupos produzido por Dissimilaridade na junção, onde as dissimilaridades nas junções tendem a ir aumentando caso haja estrutura de grupos.
agrupamento_h_2d = filmes_chris_evans %>%
column_to_rownames("Nome_Do_Filme") %>%
select(Nota, Lucro) %>%
dist(method = "euclidean") %>%
hclust(method = "centroid")
data.frame(k = NROW(agrupamento_h_2d$height):1,
height = agrupamento_h_2d$height) %>%
ggplot(aes(x = k, y = height)) +
geom_line(colour = "grey") +
geom_point() +
labs(x = "Número de Grupos produzido", y = "Dissimilaridade na junção")
Assim olhando o gráfico, vejo que a partir de 5 grupos a Dissimilaridade na junção começa a crescer, dando uma ideia que os dados podem ser bem dividos em grupos a partir de 5 grupos, logo dividirei meus dados em 4 grupos para poder análisar melhor os tipo de filmes do Chris Evans.
Dividindo os filmes do Chris Evans em 4 tipos de filmes, temos o gráfico abaixo:
agrupamento_h_2d_com_scala = filmes_chris_evans %>%
column_to_rownames("Nome_Do_Filme") %>%
select(Nota, Lucro) %>%
mutate(Lucro = log10(Lucro)) %>%
mutate_all(funs(scale)) %>%
dist(method = "euclidean") %>%
hclust(method = "centroid")
## Warning: Setting row names on a tibble is deprecated.
plot_tipo_filmes <- plota_hclusts_2d(agrupamento_h_2d_com_scala,
filmes_chris_evans,
c("Nota", "Lucro", "Nome_Do_Filme"),
linkage_method = "centroid", k = 4) + scale_y_log10() +
xlab("Nota no Rotten Tomatoes") +
ylab("Lucro do Filme(Em Milhões) - em escala de log10") +
labs(title = "Tipos de Filmes Do Chris Evans") +
geom_point(size = 3.5)
ggplotly(plot_tipo_filmes)
## We recommend that you use the dev version of ggplot2 with `ggplotly()`
## Install it with: `devtools::install_github('hadley/ggplot2')`
Agora temos nossa divisão de filmes(finalmente) do Chris Evans, dividos em 4 gruposlhes darei os seguintes nomes de acordo com suas caracteristicas:
Assim termino minha análise divindo os filmes do Capitão América(conhecido como Chris Evans) em 4 grupos cada um com características diferentes.